import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Set;

public class _438找到字符串中所有字母异位词 {
    public static List<Integer> findAnagramsOld(String s, String p) {
        char[] pc = p.toCharArray();
        Arrays.sort(pc);
        List<Integer> r=new ArrayList<>();
        int pLength = p.length();
        char[] charArray = s.toCharArray();
        for (int i = 0; i < s.length()-pLength+1; i++) {
            char[] copyOfRange = Arrays.copyOfRange(charArray, i, i + pLength);
            Arrays.sort(copyOfRange);
            if(Arrays.equals(pc, copyOfRange)){
                r.add(i);
            }
        }
        return r;
    }

    public static List<Integer> findAnagrams(String s, String p) {
        List<Integer> r= new ArrayList<>();
        int slength = s.length();
        int plength = p.length();
        if(slength<plength){
            return r;
        }
        int[] sArr=new int[26];
        int[] pArr=new int[26];
       
        for (int i = 0; i < plength; i++) {
            sArr[s.charAt(i)-'a']++;
            pArr[p.charAt(i)-'a']++;
        }
        if(Arrays.equals(sArr, pArr)){
            r.add(0);
        }
        for (int i = 0; i < slength-plength; i++) {
            sArr[s.charAt(i)-'a']--;
            sArr[s.charAt(i+plength)-'a']++;
            if(Arrays.equals(sArr, pArr)){
                r.add(i+1);
            }
        }
        return r;
    }

    public static void main(String[] args) {
        String s = "cbaebabacd";//11
        String p = "abc";//3
        List<Integer> anagrams = findAnagrams(s, p);
        anagrams.forEach(System.out::println);

    }
}
